package cn.iocoder.yudao.module.resource.service.collect;

import cn.iocoder.yudao.module.resource.dal.dataobject.collect.ResourceCollectDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 用户收藏 Service 接口
 *
 * @author 芋道源码
 */
public interface ResourceCollectService {

    /**
     * 创建收藏记录
     *
     * @param collectDO 收藏信息
     * @return 收藏ID
     */
    Long createCollect(@Valid ResourceCollectDO collectDO);

    /**
     * 删除收藏记录
     *
     * @param id 收藏ID
     */
    void deleteCollect(Long id);

    /**
     * 取消收藏（根据用户ID和素材ID）
     *
     * @param userId 用户ID
     * @param materialId 素材ID
     */
    void cancelCollect(Long userId, Long materialId);

    /**
     * 获得收藏记录
     *
     * @param id 收藏ID
     * @return 收藏记录
     */
    ResourceCollectDO getCollect(Long id);

    /**
     * 根据用户ID和素材ID获得收藏记录
     *
     * @param userId 用户ID
     * @param materialId 素材ID
     * @return 收藏记录
     */
    ResourceCollectDO getCollectByUserIdAndMaterialId(Long userId, Long materialId);

    /**
     * 根据用户ID获得收藏列表
     *
     * @param userId 用户ID
     * @return 收藏列表
     */
    List<ResourceCollectDO> getCollectListByUserId(Long userId);

    /**
     * 检查用户是否已收藏素材
     *
     * @param userId 用户ID
     * @param materialId 素材ID
     * @return 是否已收藏
     */
    boolean hasCollected(Long userId, Long materialId);

}
